Apple II
Technical Notes
_____________________________________________________________________________
                                                  Developer Technical Support


Apple IIc
#5:    Memory Expansion on the Apple IIc

Revised by:    Matt Deatherage                                  November 1988
Written by:    Cameron Birse                                     October 1986

This Technical Note describes some important differences in the "memory-
expandable" Apple IIc which you should take into account to ensure 
compatibility.
_____________________________________________________________________________

Beginning with the third Apple IIc, which was announced in September 1986, all 
new IIc models differ significantly from their predecessors.  The most notable 
of these differences is the addition of a memory expansion capability.  The 
memory expansion card for the IIc is functionally identical to the card for 
the IIe, but the IIc card "lives" in slot 4 and the firmware is included in 
the ROM on the IIc motherboard.  This architecture means that you cannot 
depend upon the firmware ID bytes to tell if a card is installed, since unlike 
other "peripheral cards" in the IIc, the memory expansion card is not 
necessarily present.  For this particular case, you need to interrogate the 
card and see how many blocks of memory are available.  If there are no 
available blocks, there is no card.


SmartPort

Do a STATUS call with a statcode = $03 to get the Device Information Block 
(DIB).  This call returns a value of $000000 in the device size fields if 
there is no RAM card.

In version 3 of the IIc ROM, the value resulting from a status call to device 
0 implies that there is always a real card connected; the ROM version 4 
returns device connected only when there is RAM card present.


ProDOS

When you do an ON_LINE call to the ProDOS MLI and there is no RAM on the 
Memory Expansion Card, you get an error $2D.  This error is not a ProDOS 
error, rather it is a SmartPort error.  The error is BADBLOCK, and basically 
tells you that the block requested was not available.  If you try to catalog 
the RAM disk from BASIC, you will get a PATH NOT FOUND error.


Pascal

Formatting the RAM disk (unit #9) with no memory on the card returns no error.  
Doing a UnitStatus call will return zero blocks available, and trying to read 
the volume directory will result in an IORESULT of 8, which means no room is 
available on the volume.  Doing the V(ols command from the F(iler will result 
in a <no dir> and # of blocks = 0.


DOS 3.3

If there is no memory on the card and you initialize it with an IN#4 (which 
returns a slash, appearing to have successfully initialized the RAM disk), you 
will get an I/O error (ONERR code = 8) if you try to read from or write to the 
RAM disk.

Important:    Another significant ramification of the memory 
expansion capability is that the mouse firmware has been 
moved to slot 7.  This change means that programs should 
scan the slots just as they would on a IIe to find what 
peripherals are installed.  Since most programs have a scan 
routine in them for the IIe, it should be a relatively minor 
change to call this routine for whatever machine you are on.  
In fact, we strongly recommend that programs always scan the 
slots for peripheral devices regardless of the machine on 
which they are running.

The firmware ID bytes for this version of the machine are:

Original Expandable IIc
    $FBB3--$06        $FBC0--$00        $FBBF--$03

Revised Expandable IIc
    $FBB3--$06        $FBC0--$00        $FBBF--$04

Apple IIc Plus
    $FBB3--$06        $FBC0--$00        $FBBF--$05


Further Reference
o    Apple IIc Technical Note #6, Buffering Blues
o    Apple IIc Technical Note #7, Existing Versions
o    Apple II Miscellaneous Technical Note #2, Apple II Family
     Identification Routines 2.1
o    Apple II Miscellaneous Technical Note #7, Apple II Family Identification
o    Apple II Miscellaneous Technical Note #8, Pascal 1.1 Firmware
     Protocol ID Bytes

